package co.edu.usbcali.sap.presentation.backEndBeans;

import co.edu.usbcali.sap.exceptions.*;
import co.edu.usbcali.sap.modelo.*;
import co.edu.usbcali.sap.modelo.dto.LineaInvestigacionDTO;
import co.edu.usbcali.sap.modelo.dto.PersonaDTO;
import co.edu.usbcali.sap.modelo.dto.ProyectoDTO;
import co.edu.usbcali.sap.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.sap.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.inputfile.FileInfo;
import com.icesoft.faces.component.inputfile.InputFile;
import com.icesoft.faces.component.menubar.MenuBar;
import com.icesoft.faces.component.menubar.MenuItem;
import com.icesoft.faces.component.menubar.MenuItems;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.component.selectinputtext.SelectInputText;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.io.File;
import java.io.FileOutputStream;
import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.EventObject;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIInput;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;
import javax.faces.el.EvaluationException;
import javax.faces.el.MethodBinding;
import javax.faces.el.MethodNotFoundException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;

/**
 * 
 * 
 * @author Zathura Code Generator http://code.google.com/p/zathura
 * 
 */
public class ProyectoView extends DataSource implements Renderable,
		DisposableBean {
	private HtmlInputText txtProTemaProyecto;
	private HtmlInputText txtProNombre;
	private HtmlInputText txtPalabraClave;
	private MenuBar usuarios;
	private List<MenuItem> menu = new ArrayList<MenuItem>();
	private Proyecto proyectoCon;
	private HtmlSelectOneMenu cmbAnte;
	private HtmlSelectOneMenu cmbEstado;
	private HtmlSelectOneMenu cmbFase;
	private HtmlInputText txtProCodigo;
	private HtmlCommandButton btnAdd;
	private HtmlCommandButton btnAdd2;
	private HtmlCommandButton btnAdd3;
	private HtmlCommandButton btnSave;
	private HtmlCommandButton btnModify;
	private HtmlCommandButton btnDelete;
	private HtmlCommandButton btnClear;
	private SelectInputText txtIntegrantes;
	private SelectInputText txtDirector;
	private SelectInputText txtLinea;
	private SelectInputDate txtProFechafin;
	private SelectInputDate txtProFechainicio;

	private boolean renderDataTable;
	private boolean flag = true;
	private RenderManager renderManager;
	private PersistentFacesState state = PersistentFacesState.getInstance();
	private List<Persona> persona = new ArrayList<Persona>();
	private List<LineaInvestigacion> linea = new ArrayList<LineaInvestigacion>();
	private List<LineaInvestigacionDTO> linea2 = new ArrayList<LineaInvestigacionDTO>();
	private List<PersonaDTO> integrantes = new ArrayList<PersonaDTO>();
	private List<PersonaDTO> directores = new ArrayList<PersonaDTO>();
	private List<SelectItem> item = new ArrayList<SelectItem>();
	private List<SelectItem> estado = new ArrayList<SelectItem>();
	private List<SelectItem> fases = new ArrayList<SelectItem>();
	private List<SelectItem> antepr = new ArrayList<SelectItem>();
	private List<Proyecto> proyecto = new ArrayList<Proyecto>();
	private List<ProyectoDTO> proyectoDTO = new ArrayList<ProyectoDTO>();

	private final List fileList = Collections.synchronizedList(new ArrayList());
	private InputFileData currentFile;
	private int fileProgress;
	private HtmlCommandButton btnGuardar;

	public void updateList(ValueChangeEvent event) throws Exception {
		try {

			String strign = event.getNewValue().toString();
			System.out.println(event.getComponent().getId().toString());
			persona = BusinessDelegatorView.FindByPath(strign, event
					.getComponent().getId().toString());
			if (persona != null) {
				item.clear();
				for (Persona personas : persona) {
					SelectItem item2 = new SelectItem(personas, personas
							.getPerNombre()
							+ "-" + personas.getPerCodigo());
					item.add(item2);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

	public void updateList2(ValueChangeEvent event) throws Exception {
		try {

			String strign = event.getNewValue().toString();
			System.out.println(event.getComponent().getId().toString());
			linea = BusinessDelegatorView.FindByPathLinea(strign);
			if (linea != null) {
				item.clear();
				for (LineaInvestigacion investigacion : linea) {
					SelectItem item2 = new SelectItem(investigacion,
							investigacion.getLininNombre() + "-"
									+ investigacion.getLininCodigo());
					item.add(item2);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}
	
	public List<Proyecto> getDataproyecto() throws Exception{
		int cod = 0;
		if ((Integer)FacesUtils.getSessionParameter("Codigo")==1234){
			proyecto = BusinessDelegatorView.getProyecto();
		}else {
			proyecto = BusinessDelegatorView.findProyectos((String)FacesUtils.getSessionParameter("Codigo"), (String)FacesUtils.getSessionParameter("Rol"));
		}
		for (Proyecto proy : proyecto) {
			if (proy.getTipoProyecto().getTipproCodigo() == 1){
				proyecto.remove(proy);
			}
		}
		
		return proyecto;
	}
	public HtmlCommandButton getBtnAdd() {
		return btnAdd;
	}

	public void setBtnAdd(HtmlCommandButton btnAdd) {
		this.btnAdd = btnAdd;
	}

	public List<Persona> getPersona() {
		return persona;
	}

	public void setPersona(List<Persona> persona) {
		this.persona = persona;
	}

	public ProyectoView() {
		super("");

		try {
			String codigoProyect = (String) FacesUtils
					.getSessionParameter("CodProyecto");

			if (codigoProyect != null) {
				proyectoCon = BusinessDelegatorView.getProyecto(new Integer(
						codigoProyect));

				if (proyectoCon != null) {
					if (txtProNombre == null) {
						txtProNombre = new HtmlInputText();
					}
					txtProNombre.setValue(proyectoCon.getProNombre());
					if (txtProTemaProyecto == null) {
						txtProTemaProyecto = new HtmlInputText();
					}
					txtProTemaProyecto.setValue(proyectoCon
							.getProTemaproyecto());
					if (cmbEstado == null) {
						cmbEstado = new HtmlSelectOneMenu();
					}
					/*cmbEstado.setValue(proyectoCon.getEstado().getEstCodigo());
					if (cmbFase == null) {
						cmbFase = new HtmlSelectOneMenu();
					}
					cmbFase.setValue(proyectoCon.getFaseProyecto()
							.getFasproCodigo());*/
					if (txtProFechafin == null) {
						txtProFechafin = new SelectInputDate();
					}
					txtProFechafin.setValue(proyectoCon.getProFechafin());
					if (txtProFechainicio == null) {
						txtProFechainicio = new SelectInputDate();
					}
					txtProFechainicio.setValue(proyectoCon.getProFechainicio());
					List<LineaInvestigacion> list2 = BusinessDelegatorView
							.getProyectoFromLinea(proyectoCon.getProCodigo());
					if (list2 != null) {
						for (LineaInvestigacion persona : list2) {
							LineaInvestigacionDTO persona2 = new LineaInvestigacionDTO();
							persona2.setLininCodigo(persona.getLininCodigo()
									+ "");
							persona2.setLininNombre(persona.getLininNombre());
							persona2.setLineaInvestigacion(persona);
							persona2.setProyectoView(this);

							linea2.add(persona2);
						}
					}
					integrantes.clear();

					List<Persona> list = BusinessDelegatorView
							.getPersonasFromProyecto(1, proyectoCon
									.getProCodigo());
					if (list != null) {
						for (Persona persona : list) {
							PersonaDTO persona2 = new PersonaDTO();
							persona2.setPerCodigo(persona.getPerCodigo() + "");
							persona2.setPerNombre(persona.getPerNombre());
							persona2.setPersona(persona);
							persona2.setProyectoView(this);

							integrantes.add(persona2);
						}
					}
					directores.clear();
					list = BusinessDelegatorView.getPersonasFromProyecto(4,
							proyectoCon.getProCodigo());
					if (list != null) {
						for (Persona persona : list) {
							PersonaDTO persona2 = new PersonaDTO();
							persona2.setPerCodigo(persona.getPerCodigo() + "");
							persona2.setPerNombre(persona.getPerNombre());
							persona2.setPersona(persona);
							persona2.setProyectoView(this);

							directores.add(persona2);
						}
					}
					List<DocumentosProyecto> proyecto = BusinessDelegatorView
							.getDocumentoProyectoPorProyecto(proyectoCon
									.getProCodigo());
				/*	for (DocumentosProyecto documentosProyecto : proyecto) {
						Integer a = documentosProyecto.getTipoDocumento()
								.getTipdocCodigo();
						if (a == 1) {
							File f = new File(System.getProperty("user.home")
									+ File.separator
									+ documentosProyecto.getDocproNombre());
							f.createNewFile();
							FileOutputStream fileInputStream2 = new FileOutputStream(
									f);
							System.out.println(documentosProyecto
									.getDocproArchivo().toString());
							fileInputStream2.write(documentosProyecto
									.getDocproArchivo());
							fileInputStream2.close();
							FileInfo info = new FileInfo();
							info.setFile(f);
							info.setFileName(documentosProyecto
									.getDocproNombre());
							info.setContentType(documentosProyecto
									.getDocproFormato());
							info.setSize(f.length());

							fileList.add(new InputFileData(info, f));
						}

					}*/

				}
			}

		} catch (Exception e) {

		}

		/*
		 * 
		 * }
		 */

	}

	public String action_clear() {
		txtProNombre.setValue(null);
		txtProNombre.setDisabled(false);
		txtProTemaProyecto.setValue(null);
		txtProTemaProyecto.setDisabled(true);
		txtProFechafin.setValue(null);
		txtProFechafin.setDisabled(true);
		txtProFechainicio.setValue(null);
		txtProFechainicio.setDisabled(true);
		/*
		 * txtProCodigo.setValue(null); txtProCodigo.setDisabled(false);
		 */
		txtIntegrantes.setValue(null);
		txtIntegrantes.setDisabled(true);
		txtDirector.setValue(null);
		txtDirector.setDisabled(true);
		txtLinea.setValue(null);
		txtLinea.setDisabled(true);
		linea2.clear();
		integrantes.clear();
		directores.clear();
		cmbEstado.setDisabled(true);
		cmbFase.setDisabled(true);
		btnAdd3.setDisabled(true);
		btnAdd2.setDisabled(true);
		btnAdd.setDisabled(true);
		btnSave.setDisabled(true);
		btnDelete.setDisabled(true);
		btnModify.setDisabled(true);
		btnClear.setDisabled(false);

		fileList.clear();
		return "";
	}

	public void cargarDatos(String entity2) throws Exception {

		Proyecto entity = BusinessDelegatorView.getProyecto(Integer
				.parseInt(entity2));
		txtIntegrantes.setDisabled(false);
		txtLinea.setDisabled(false);
		txtDirector.setDisabled(false);
		linea2.clear();
		List<LineaInvestigacion> list2 = BusinessDelegatorView
				.getProyectoFromLinea(entity.getProCodigo());
		if (list2 != null) {
			for (LineaInvestigacion persona : list2) {
				LineaInvestigacionDTO persona2 = new LineaInvestigacionDTO();
				persona2.setLininCodigo(persona.getLininCodigo() + "");
				persona2.setLininNombre(persona.getLininNombre());
				persona2.setLineaInvestigacion(persona);
				persona2.setProyectoView(this);

				linea2.add(persona2);
			}
		}
		integrantes.clear();

		List<Persona> list = BusinessDelegatorView.getPersonasFromProyecto(1,
				entity.getProCodigo());
		if (list != null) {
			for (Persona persona : list) {
				PersonaDTO persona2 = new PersonaDTO();
				persona2.setPerCodigo(persona.getPerCodigo() + "");
				persona2.setPerNombre(persona.getPerNombre());
				persona2.setPersona(persona);
				persona2.setProyectoView(this);

				integrantes.add(persona2);
			}
		}
		directores.clear();
		list = BusinessDelegatorView.getPersonasFromProyecto(4, entity
				.getProCodigo());
		if (list != null) {
			for (Persona persona : list) {
				PersonaDTO persona2 = new PersonaDTO();
				persona2.setPerCodigo(persona.getPerCodigo() + "");
				persona2.setPerNombre(persona.getPerNombre());
				persona2.setPersona(persona);
				persona2.setProyectoView(this);

				directores.add(persona2);
			}
		}
		txtProTemaProyecto.setValue(entity.getProTemaproyecto());
		txtProTemaProyecto.setDisabled(false);
		txtProFechainicio.setValue(entity.getProFechainicio());
		txtProFechainicio.setDisabled(false);
		txtProNombre.setValue(entity.getProNombre());
		txtProNombre.setDisabled(false);
		/*
		 * txtProCodigo.setValue(entity.getProCodigo());
		 * txtProCodigo.setDisabled(true);
		 */
		cmbEstado.setValue(entity.getEstado());
		cmbEstado.setDisabled(false);
		cmbFase.setValue(entity.getFaseProyecto());
		cmbFase.setDisabled(false);
		btnSave.setDisabled(true);
		btnAdd.setDisabled(false);
		btnDelete.setDisabled(false);
		btnModify.setDisabled(false);
		btnClear.setDisabled(false);
		btnAdd2.setDisabled(false);
		btnAdd3.setDisabled(false);
		txtProFechafin.setValue(entity.getProFechafin());
		txtProFechafin.setDisabled(false);
	}

	public void listener_txtId(ValueChangeEvent event) {
		if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
			Proyecto entity = null;

			try {
				entity = BusinessDelegatorView
						.getProyectoporNombre(txtProNombre.getValue()
								.toString());

				if (entity == null) {
					txtProNombre.setDisabled(false);
					txtIntegrantes.setDisabled(false);
					txtDirector.setDisabled(false);
					txtLinea.setDisabled(false);
					txtProTemaProyecto.setDisabled(false);
					txtProFechafin.setDisabled(false);
					txtProFechainicio.setDisabled(false);
					// txtProCodigo.setDisabled(false);
					cmbEstado.setDisabled(false);
					cmbFase.setDisabled(false);
					btnAdd.setDisabled(false);
					btnAdd2.setDisabled(false);
					btnAdd3.setDisabled(false);
					btnSave.setDisabled(false);
					btnDelete.setDisabled(true);
					btnModify.setDisabled(true);
					btnClear.setDisabled(false);

				} else {
					txtProFechafin.setValue(entity.getProFechafin());
					txtProFechafin.setDisabled(false);
					txtIntegrantes.setDisabled(false);
					txtLinea.setDisabled(false);
					txtDirector.setDisabled(false);
					linea2.clear();
					List<LineaInvestigacion> list2 = BusinessDelegatorView
							.getProyectoFromLinea(entity.getProCodigo());
					if (list2 != null) {
						for (LineaInvestigacion persona : list2) {
							LineaInvestigacionDTO persona2 = new LineaInvestigacionDTO();
							persona2.setLininCodigo(persona.getLininCodigo()
									+ "");
							persona2.setLininNombre(persona.getLininNombre());
							persona2.setLineaInvestigacion(persona);
							persona2.setProyectoView(this);

							linea2.add(persona2);
						}
					}
					integrantes.clear();

					List<Persona> list = BusinessDelegatorView
							.getPersonasFromProyecto(1, entity.getProCodigo());
					if (list != null) {
						for (Persona persona : list) {
							PersonaDTO persona2 = new PersonaDTO();
							persona2.setPerCodigo(persona.getPerCodigo() + "");
							persona2.setPerNombre(persona.getPerNombre());
							persona2.setPersona(persona);
							persona2.setProyectoView(this);

							integrantes.add(persona2);
						}
					}
					directores.clear();
					list = BusinessDelegatorView.getPersonasFromProyecto(4,
							entity.getProCodigo());
					if (list != null) {
						for (Persona persona : list) {
							PersonaDTO persona2 = new PersonaDTO();
							persona2.setPerCodigo(persona.getPerCodigo() + "");
							persona2.setPerNombre(persona.getPerNombre());
							persona2.setPersona(persona);
							persona2.setProyectoView(this);

							directores.add(persona2);
						}
					}
					List<DocumentosProyecto> proyecto = BusinessDelegatorView
							.getDocumentoProyectoPorProyecto(entity
									.getProCodigo());
					for (DocumentosProyecto documentosProyecto : proyecto) {
						Integer a = documentosProyecto.getTipoDocumento()
								.getTipdocCodigo();
						if (a == 1) {
							File f = new File(System.getProperty("user.home")
									+ File.separator
									+ documentosProyecto.getDocproNombre());
							f.createNewFile();
							FileOutputStream fileInputStream2 = new FileOutputStream(
									f);
							System.out.println(documentosProyecto
									.getDocproArchivo().toString());
							fileInputStream2.write(documentosProyecto
									.getDocproArchivo());
							fileInputStream2.close();
							FileInfo info = new FileInfo();
							info.setFile(f);
							info.setFileName(documentosProyecto
									.getDocproNombre());
							info.setContentType(documentosProyecto
									.getDocproFormato());
							info.setSize(f.length());

							fileList.add(new InputFileData(info, f));
						}

					}
					txtProTemaProyecto.setValue(entity.getProTemaproyecto());
					txtProTemaProyecto.setDisabled(false);
					txtProFechainicio.setValue(entity.getProFechainicio());
					txtProFechainicio.setDisabled(false);

					txtProNombre.setDisabled(true);
					// txtProCodigo.setValue(entity.getProCodigo());
					// txtProCodigo.setDisabled(true);
					cmbEstado.setValue(entity.getEstado().getEstCodigo());
					System.out.println(entity.getEstado());
					cmbEstado.setDisabled(false);
					System.out.println(entity.getFaseProyecto()
							.getFasproCodigo().toString());
					cmbFase
							.setValue(entity.getFaseProyecto()
									.getFasproCodigo());
					cmbFase.setDisabled(false);
					btnSave.setDisabled(true);
					btnAdd.setDisabled(false);
					btnDelete.setDisabled(false);
					btnModify.setDisabled(false);
					btnClear.setDisabled(false);
					btnAdd2.setDisabled(false);
					btnAdd3.setDisabled(false);
					if (entity.getEstado().getEstCodigo() != 6
							&& entity.getFaseProyecto().getFasproCodigo() == 3) {
						cmbFase.setDisabled(true);
						cmbEstado.setDisabled(true);
					}

				}
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}

	public void listener_txtId2(Integer tati) {
		if ((tati != null) && tati != 0) {
			Proyecto entity = null;

			try {
				Integer proCodigo = new Integer(tati);
				entity = BusinessDelegatorView.getProyecto(proCodigo);

				if (entity == null) {
					txtProNombre.setDisabled(false);
					txtIntegrantes.setDisabled(false);
					txtDirector.setDisabled(false);
					txtLinea.setDisabled(false);
					txtProTemaProyecto.setDisabled(false);
					txtProFechafin.setDisabled(false);
					txtProFechainicio.setDisabled(false);
					// txtProCodigo.setDisabled(false);
					cmbEstado.setDisabled(false);
					cmbFase.setDisabled(false);
					btnAdd.setDisabled(false);
					btnAdd2.setDisabled(false);
					btnAdd3.setDisabled(false);
					btnSave.setDisabled(false);
					btnDelete.setDisabled(true);
					btnModify.setDisabled(true);
					btnClear.setDisabled(false);

				} else {
					txtProFechafin.setValue(entity.getProFechafin());
					txtProFechafin.setDisabled(false);
					txtIntegrantes.setDisabled(false);
					txtLinea.setDisabled(false);
					txtDirector.setDisabled(false);
					linea2.clear();
					List<LineaInvestigacion> list2 = BusinessDelegatorView
							.getProyectoFromLinea(proCodigo);
					if (list2 != null) {
						for (LineaInvestigacion persona : list2) {
							LineaInvestigacionDTO persona2 = new LineaInvestigacionDTO();
							persona2.setLininCodigo(persona.getLininCodigo()
									+ "");
							persona2.setLininNombre(persona.getLininNombre());
							persona2.setLineaInvestigacion(persona);
							persona2.setProyectoView(this);

							linea2.add(persona2);
						}
					}
					integrantes.clear();

					List<Persona> list = BusinessDelegatorView
							.getPersonasFromProyecto(1, entity.getProCodigo());
					if (list != null) {
						for (Persona persona : list) {
							PersonaDTO persona2 = new PersonaDTO();
							persona2.setPerCodigo(persona.getPerCodigo() + "");
							persona2.setPerNombre(persona.getPerNombre());
							persona2.setPersona(persona);
							persona2.setProyectoView(this);

							integrantes.add(persona2);
						}
					}
					directores.clear();
					list = BusinessDelegatorView.getPersonasFromProyecto(4,
							entity.getProCodigo());
					if (list != null) {
						for (Persona persona : list) {
							PersonaDTO persona2 = new PersonaDTO();
							persona2.setPerCodigo(persona.getPerCodigo() + "");
							persona2.setPerNombre(persona.getPerNombre());
							persona2.setPersona(persona);
							persona2.setProyectoView(this);

							directores.add(persona2);
						}
					}
					List<DocumentosProyecto> proyecto = BusinessDelegatorView
							.getDocumentoProyectoPorProyecto(entity
									.getProCodigo());
					for (DocumentosProyecto documentosProyecto : proyecto) {
						Integer a = documentosProyecto.getTipoDocumento()
								.getTipdocCodigo();
						if (a == 1) {
							fileList.add(documentosProyecto);
						}

					}
					txtProTemaProyecto.setValue(entity.getProTemaproyecto());
					txtProTemaProyecto.setDisabled(false);
					txtProFechainicio.setValue(entity.getProFechainicio());
					txtProFechainicio.setDisabled(false);
					txtProNombre.setValue(entity.getProNombre());
					txtProNombre.setDisabled(false);
					// txtProCodigo.setValue(entity.getProCodigo());
					// txtProCodigo.setDisabled(true);
					cmbEstado.setValue(entity.getEstado());
					cmbEstado.setDisabled(false);
					cmbFase.setValue(entity.getFaseProyecto());
					cmbFase.setDisabled(false);
					btnSave.setDisabled(true);
					btnAdd.setDisabled(false);
					btnDelete.setDisabled(false);
					btnModify.setDisabled(false);
					btnClear.setDisabled(false);
					btnAdd2.setDisabled(false);
					btnAdd3.setDisabled(false);

				}
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}

	public String action_save2() {
		try {
			if (fileList.size() == 0) {
				FacesUtils
						.addErrorMessage("Por Favor seleccione un archivo .doc o .docx y presione upload");
			} else {
				BusinessDelegatorView.saveProyecto2(FacesUtils
						.checkInteger(txtProCodigo), FacesUtils
						.checkDate(txtProFechafin), FacesUtils
						.checkDate(txtProFechainicio), FacesUtils
						.checkString(txtProNombre), FacesUtils
						.checkString(txtProTemaProyecto), integrantes,
						directores, FacesUtils.checkInteger(cmbEstado),
						FacesUtils.checkInteger(cmbFase), 2, FacesUtils
								.checkInteger(cmbAnte), linea2);
				action_guardar();
				FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
				action_clear();
			}
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}
		return "";
	}

	public String action_saveAnte() {
		try {
			// else {

			// }
			Integer codigo = 0;
			String fechafin = "";
			try {
				fechafin = txtProFechafin.getValue().toString();
			} catch (Exception e) {

			}

			String fechainicio = txtProFechainicio.getValue().toString();
			String nombre = txtProNombre.getValue().toString();
			String tema = txtProTemaProyecto.getValue().toString();
			String estado = cmbEstado.getValue().toString();
			String fase = cmbFase.getValue().toString();
			Integer tipo = 1;
			Integer proyecto = 0;

			if (nombre.equals("")) {
				throw new Exception(
						"El nombre del anteproyecto es de caracter obligatorio");
			}
			if (tema.equals("")) {
				throw new Exception(
						"El tema del anteproyecto es de caracter obligatorio");
			}
			if (fechainicio.equals("")) {
				throw new Exception(
						"La fecha de inicio del anteproyecto es de caracter obligatorio");
			}
			if (!fechafin.equals("") && !fase.equals("3")) {
				throw new Exception(
						"La fase del anteproyecto debe ser Finalizado por la existencia de una fecha final ");
			}
			if (fase.equals("3") && estado.equals("6")) {
				throw new Exception(
						"El estado no puede ser No Evaluado porque el anteproyecto ha finalizado ");
			}
			if (integrantes.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos un integrante");
			}
			if (directores.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos un director");
			}
			if (linea2.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos una l&#236;nea de investigaci&#243;n");
			}
			Date fechaini = FacesUtils.checkDate(txtProFechainicio);
			if (!Utilities.compararFechaActualMenor(fechaini)) {
				throw new Exception(
						"La fecha inicial debe ser menor o igual a la fecha actual");
			}
			if (!fechafin.equals("")) {
				Date fechafini = FacesUtils.checkDate(txtProFechafin);
				if (!Utilities.compararFechaActualMenor(fechafini)) {
					throw new Exception(
							"La fecha final debe ser menor o igual a la fecha actual");
				}
				if (!Utilities.compararFechas(fechaini, fechafini)) {
					throw new Exception(
							"La fecha inicial debe ser menor de la fecha final");
				}
			}
			if (fileList.size() == 0) {
				throw new Exception(
						"Por Favor seleccione un archivo .doc o .docx y presione upload");
			}

			BusinessDelegatorView.saveProyecto2(codigo, FacesUtils
					.checkDate(txtProFechafin), FacesUtils
					.checkDate(txtProFechainicio), nombre, tema, integrantes,
					directores, Integer.parseInt(estado), Integer
							.parseInt(fase), tipo, proyecto, linea2);
			action_guardar();
			FacesContext.getCurrentInstance().addMessage("",
					new FacesMessage("Se creo el anteproyecto con &#233;xito"));
			action_clear();

		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("",
					new FacesMessage(e.getMessage()));
		}
		return "";
	}

	public String action_delete() {
		try {
			BusinessDelegatorView.deleteProyecto(FacesUtils
					.checkInteger(txtProCodigo));
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify() {
		try {
			Integer codigo = 0;
			String fechafin = "";
			try {
				fechafin = txtProFechafin.getValue().toString();
			} catch (Exception e) {

			}

			String fechainicio = txtProFechainicio.getValue().toString();
			String nombre = txtProNombre.getValue().toString();
			String tema = txtProTemaProyecto.getValue().toString();
			String estado = cmbEstado.getValue().toString();
			String fase = cmbFase.getValue().toString();
			Integer tipo = 1;
			Integer proyecto = 0;

			if (nombre.equals("")) {
				throw new Exception(
						"El nombre del anteproyecto es de caracter obligatorio");
			}
			if (tema.equals("")) {
				throw new Exception(
						"El tema del anteproyecto es de caracter obligatorio");
			}
			if (fechainicio.equals("")) {
				throw new Exception(
						"La fecha de inicio del anteproyecto es de caracter obligatorio");
			}
			if (!fechafin.equals("") && !fase.equals("3")) {
				throw new Exception(
						"La fase del anteproyecto debe ser Finalizado por la existencia de una fecha final ");
			}
			if (fase.equals("3") && estado.equals("6")) {
				throw new Exception(
						"El estado no puede ser No Evaluado porque el anteproyecto ha finalizado ");
			}
			if (integrantes.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos un integrante");
			}
			if (directores.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos un director");
			}
			if (linea2.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos una l&#236;nea de investigaci&#243;n");
			}
			Date fechaini = FacesUtils.checkDate(txtProFechainicio);
			if (!Utilities.compararFechaActualMenor(fechaini)) {
				throw new Exception(
						"La fecha inicial debe ser menor o igual a la fecha actual");
			}
			if (!fechafin.equals("")) {
				Date fechafini = FacesUtils.checkDate(txtProFechafin);
				if (!Utilities.compararFechaActualMenor(fechafini)) {
					throw new Exception(
							"La fecha final debe ser menor o igual a la fecha actual");
				}
				if (!Utilities.compararFechas(fechaini, fechafini)) {
					throw new Exception(
							"La fecha inicial debe ser menor de la fecha final");
				}
			}
			if (fileList.size() == 0) {
				throw new Exception(
						"Por Favor seleccione un archivo .doc o .docx y presione upload");
			}
			BusinessDelegatorView.updateProyecto2(codigo, FacesUtils
					.checkDate(txtProFechafin), FacesUtils
					.checkDate(txtProFechainicio), nombre, tema, integrantes,
					directores, Integer.parseInt(estado), Integer
							.parseInt(fase), tipo, proyecto, linea2);
			action_guardar();
			FacesContext.getCurrentInstance().addMessage("",
					new FacesMessage("Se creo el anteproyecto con &#233;xito"));
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify2() {
		try {
			Integer codigo = 0;
			String fechafin = "";
			try {
				fechafin = txtProFechafin.getValue().toString();
			} catch (Exception e) {

			}

			String fechainicio = txtProFechainicio.getValue().toString();
			String nombre = txtProNombre.getValue().toString();
			String tema = txtProTemaProyecto.getValue().toString();
			String estado = cmbEstado.getValue().toString();
			String fase = cmbFase.getValue().toString();
			Integer tipo = 1;
			Integer proyecto = 0;

			if (nombre.equals("")) {
				throw new Exception(
						"El nombre del anteproyecto es de caracter obligatorio");
			}
			if (tema.equals("")) {
				throw new Exception(
						"El tema del anteproyecto es de caracter obligatorio");
			}
			if (fechainicio.equals("")) {
				throw new Exception(
						"La fecha de inicio del anteproyecto es de caracter obligatorio");
			}
			if (!fechafin.equals("") && !fase.equals("3")) {
				throw new Exception(
						"La fase del anteproyecto debe ser Finalizado por la existencia de una fecha final ");
			}
			if (fase.equals("3") && estado.equals("6")) {
				throw new Exception(
						"El estado no puede ser No Evaluado porque el anteproyecto ha finalizado ");
			}
			if (integrantes.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos un integrante");
			}
			if (directores.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos un director");
			}
			if (linea2.size() == 0) {
				throw new Exception(
						"Es obligatorio ingresar al menos una l&#236;nea de investigaci&#243;n");
			}
			Date fechaini = FacesUtils.checkDate(txtProFechainicio);
			if (!Utilities.compararFechaActualMenor(fechaini)) {
				throw new Exception(
						"La fecha inicial debe ser menor o igual a la fecha actual");
			}
			if (!fechafin.equals("")) {
				Date fechafini = FacesUtils.checkDate(txtProFechafin);
				if (!Utilities.compararFechaActualMenor(fechafini)) {
					throw new Exception(
							"La fecha final debe ser menor o igual a la fecha actual");
				}
				if (!Utilities.compararFechas(fechaini, fechafini)) {
					throw new Exception(
							"La fecha inicial debe ser menor de la fecha final");
				}
			}
			if (fileList.size() == 0) {
				throw new Exception(
						"Por Favor seleccione un archivo .doc o .docx y presione upload");
			}
			BusinessDelegatorView.updateProyecto2(codigo, FacesUtils
					.checkDate(txtProFechafin), FacesUtils
					.checkDate(txtProFechainicio), nombre, tema, integrantes,
					directores, Integer.parseInt(estado), Integer
							.parseInt(fase), tipo, proyecto, linea2);
			action_guardar();
			FacesContext.getCurrentInstance().addMessage("",
					new FacesMessage("Se modifico el anteproyecto con &#233;xito"));
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";

	}

	public String action_modifyWitDTO(Integer proCodigo, Date proFechafin,
			Date proFechainicio, String proNombre, String tema,
			Integer comCodigo_Comite, Integer estCodigo_Estado,
			Integer fasproCodigo_FaseProyecto, Integer tipproCodigo_TipoProyecto)
			throws Exception {
		try {
			BusinessDelegatorView.updateProyecto(proCodigo, proFechafin,
					proFechainicio, proNombre, tema, comCodigo_Comite,
					estCodigo_Estado, fasproCodigo_FaseProyecto,
					tipproCodigo_TipoProyecto);
			renderManager.getOnDemandRenderer("ProyectoView").requestRender();
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("ProyectoView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public String action_retirar(Integer perCodigo, String perNombre)
			throws Exception {
		int x = 0;
		for (PersonaDTO persona3 : directores) {
			if (persona3.getPerCodigo().equals(perCodigo + "")) {
				directores.remove(x);
				break;
			}
			x++;
		}

		return "";
	}

	public String action_agregar() throws Exception {
		try {
			if (integrantes.size() < 3) {
				String perso[] = txtIntegrantes.getValue().toString()
						.split("-");
				if (perso.length > 1 && Utilities.isNumeric((perso[1].trim()))) {
					for (PersonaDTO dto : integrantes) {
						if (dto.getPerCodigo().equals(perso[1].trim())) {
							FacesUtils
									.addErrorMessage("El estudiante ya ha sido ingresado");
							return "";
						}
					}

					Persona persona = BusinessDelegatorView.getPersona(Integer
							.parseInt(perso[1]));
					if (persona != null) {
						PersonaDTO persona2 = new PersonaDTO();
						persona2.setPerCodigo(persona.getPerCodigo() + "");
						persona2.setPerNombre(persona.getPerNombre());
						persona2.setPersona(persona);
						persona2.setProyectoView(this);

						integrantes.add(persona2);
						txtIntegrantes.setValue("");
					} else {
						FacesUtils
								.addErrorMessage("El estudiante seleccionado no existe, intente seleccionar de nuevo");
					}

				} else {
					FacesUtils
							.addErrorMessage("Seleccione de manera correcta al integrante");
				}
			} else {
				FacesUtils
						.addErrorMessage("El ingreso m&#225;ximo de estudiantes es de 3");
			}

		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("ProyectoView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}
		return "";
	}

	public String action_retirar3(Integer perCodigo, String perNombre)
			throws Exception {
		int x = 0;
		for (LineaInvestigacionDTO persona3 : linea2) {
			if (persona3.getLininCodigo().equals(perCodigo + "")) {
				linea2.remove(x);
				break;
			}
			x++;
		}

		return "";
	}

	public String action_agregar3() throws Exception {
		try {
			if (linea2.size() < 3) {
				String perso[] = txtLinea.getValue().toString().split("-");
				if (perso.length > 1 && Utilities.isNumeric((perso[1].trim()))) {
					for (LineaInvestigacionDTO dto : linea2) {
						if (dto.getLininCodigo().equals(perso[1].trim())) {
							FacesUtils
									.addErrorMessage("La l&#237;nea ya ha sido ingresada");
							return "";
						}
					}

					LineaInvestigacion persona = BusinessDelegatorView
							.getLineaInvestigacion(Integer.parseInt(perso[1]));
					if (persona != null) {
						LineaInvestigacionDTO persona2 = new LineaInvestigacionDTO();
						persona2.setLininCodigo(persona.getLininCodigo() + "");
						persona2.setLininNombre(persona.getLininNombre());
						persona2.setLineaInvestigacion(persona);
						persona2.setProyectoView(this);

						linea2.add(persona2);
						txtLinea.setValue("");
					} else {
						FacesUtils
								.addErrorMessage("El estudiante seleccionado no existe, intente seleccionar de nuevo");
					}

				} else {
					FacesUtils
							.addErrorMessage("Seleccione de manera correcta la L&#237;nea de Investigaci&#243;n");
				}
			} else {
				FacesUtils
						.addErrorMessage("El ingreso m&#225;ximo de L&#237;nea de Investigaci&#243;n es de 3");
			}

		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("ProyectoView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}
		return "";
	}

	public String action_retirar2(Integer perCodigo, String perNombre)
			throws Exception {
		int x = 0;
		for (PersonaDTO persona3 : integrantes) {
			if (persona3.getPerCodigo().equals(perCodigo + "")) {
				integrantes.remove(x);
				break;
			}
			x++;
		}

		return "";
	}

	public String action_agregar2() throws Exception {
		try {
			if (directores.size() < 3) {
				String perso[] = txtDirector.getValue().toString().split("-");
				if (perso.length > 1 && Utilities.isNumeric((perso[1].trim()))) {
					for (PersonaDTO dto : directores) {
						if (dto.getPerCodigo().equals(perso[1].trim())) {
							FacesUtils
									.addErrorMessage("El director ya ha sido ingresado");
							return "";
						}
					}

					Persona persona = BusinessDelegatorView.getPersona(Integer
							.parseInt(perso[1]));
					if (persona != null) {
						PersonaDTO persona2 = new PersonaDTO();
						persona2.setPerCodigo(persona.getPerCodigo() + "");
						persona2.setPerNombre(persona.getPerNombre());
						persona2.setPersona(persona);
						persona2.setProyectoView(this);

						directores.add(persona2);
						txtDirector.setValue("");
					} else {
						FacesUtils
								.addErrorMessage("El director seleccionado no existe, intente seleccionar de nuevo");
					}

				} else {
					FacesUtils
							.addErrorMessage("Seleccione de manera correcta al director");
				}
			} else {
				FacesUtils
						.addErrorMessage("El ingreso m&#225;ximo de directores es de 3");
			}

		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("ProyectoView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}
		return "";
	}

	public List<Proyecto> getProyecto() {
		if (flag) {
			try {
				proyecto = BusinessDelegatorView.getProyecto();
				flag = false;
			} catch (Exception e) {
				flag = true;
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}

		return proyecto;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setProyecto(List<Proyecto> proyecto) {
		this.proyecto = proyecto;
	}

	public boolean isRenderDataTable() {
		try {
			if (flag) {
				if (BusinessDelegatorView.findTotalNumberProyecto() > 0) {
					renderDataTable = true;
				} else {
					renderDataTable = false;
				}
			}

			flag = false;
		} catch (Exception e) {
			renderDataTable = false;
			e.printStackTrace();
		}

		return renderDataTable;
	}
	

	public DataModel getData() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModel(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<Proyecto> getDataPage(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberProyecto = 0;

		try {
			totalNumberProyecto = BusinessDelegatorView
					.findTotalNumberProyecto().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberProyecto) {
			endIndex = totalNumberProyecto;
		}

		try {
			proyecto = BusinessDelegatorView.findPageProyecto(sortColumnName,
					sortAscending, startRow, endIndex - startRow);

			// Remove this Renderable from the existing render groups.
			// leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		// joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<Proyecto>(totalNumberProyecto, startRow, proyecto);
	}

	public DataModel getDataDTO() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModelDTO(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<ProyectoDTO> getDataPageDTO(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberProyecto = 0;

		try {
			totalNumberProyecto = BusinessDelegatorView
					.findTotalNumberProyecto().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberProyecto) {
			endIndex = totalNumberProyecto;
		}

		try {
			proyecto = BusinessDelegatorView.findPageProyecto(sortColumnName,
					sortAscending, startRow, endIndex - startRow);

			if (Utilities.validationsList(proyecto)) {
				proyectoDTO = new ArrayList<ProyectoDTO>();

				for (Proyecto proyectoTmp : proyecto) {
					ProyectoDTO proyectoDTO2 = new ProyectoDTO();
					proyectoDTO2.setProCodigo(proyectoTmp.getProCodigo()
							.toString());
					proyectoDTO2.setProFechafin(proyectoTmp.getProFechafin());
					proyectoDTO2.setProFechainicio(proyectoTmp
							.getProFechainicio());
					proyectoDTO2
							.setProNombre((proyectoTmp.getProNombre() != null) ? proyectoTmp
									.getProNombre().toString()
									: null);
					/*
					 * proyectoDTO2.setComCodigo_Comite((proyectoTmp.getComite()
					 * .getComCodigo() != null) ? proyectoTmp.getComite()
					 * .getComCodigo().toString() : null);
					 */
					proyectoDTO2.setEstCodigo_Estado((proyectoTmp.getEstado()
							.getEstCodigo() != null) ? proyectoTmp.getEstado()
							.getEstCodigo().toString() : null);
					proyectoDTO2
							.setFasproCodigo_FaseProyecto((proyectoTmp
									.getFaseProyecto().getFasproCodigo() != null) ? proyectoTmp
									.getFaseProyecto().getFasproCodigo()
									.toString()
									: null);
					proyectoDTO2
							.setTipproCodigo_TipoProyecto((proyectoTmp
									.getTipoProyecto().getTipproCodigo() != null) ? proyectoTmp
									.getTipoProyecto().getTipproCodigo()
									.toString()
									: null);
					proyectoDTO2.setProyecto(proyectoTmp);
					proyectoDTO2.setProyectoView(this);
					proyectoDTO.add(proyectoDTO2);
				}
			}

			// Remove this Renderable from the existing render groups.
			leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<ProyectoDTO>(totalNumberProyecto, startRow,
				proyectoDTO);
	}

	protected boolean isDefaultAscending(String sortColumn) {
		return true;
	}

	/**
	 * This method is called when a render call is made from the server. Render
	 * calls are only made to views containing an updated record. The data is
	 * marked as dirty to trigger a fetch of the updated record from the
	 * database before rendering takes place.
	 */
	public PersistentFacesState getState() {
		onePageDataModel.setDirtyData();

		return state;
	}

	/**
	 * This method is called from faces-config.xml with each new session.
	 */
	public void setRenderManager(RenderManager renderManager) {
		this.renderManager = renderManager;
	}

	public void renderingException(RenderingException arg0) {
		if (arg0 instanceof TransientRenderingException) {
		} else if (arg0 instanceof FatalRenderingException) {
			// Remove from existing Customer render groups.
			leaveRenderGroups();
		}
	}

	/**
	 * Remove this Renderable from existing uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void leaveRenderGroups() {
		if (Utilities.validationsList(proyectoDTO)) {
			for (ProyectoDTO proyectoTmp : proyectoDTO) {
				renderManager.getOnDemandRenderer("ProyectoView").remove(this);
			}
		}
	}

	/**
	 * Add this Renderable to the new uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void joinRenderGroups() {
		if (Utilities.validationsList(proyectoDTO)) {
			for (ProyectoDTO proyectoTmp : proyectoDTO) {
				renderManager.getOnDemandRenderer("ProyectoView").add(this);
			}
		}
	}

	public void dispose() throws Exception {
	}

	public RenderManager getRenderManager() {
		return renderManager;
	}

	public void setState(PersistentFacesState state) {
		this.state = state;
	}

	public HtmlInputText getTxtProTemaProyecto() {
		return txtProTemaProyecto;
	}

	public void setTxtProTemaProyecto(HtmlInputText txtProTemaProyecto) {
		this.txtProTemaProyecto = txtProTemaProyecto;
	}

	public HtmlInputText getTxtProNombre() {
		return txtProNombre;
	}

	public void setTxtProNombre(HtmlInputText txtProNombre) {
		this.txtProNombre = txtProNombre;
	}

	public SelectInputDate getTxtProFechafin() {
		/*
		 * String string = (String)
		 * FacesUtils.getSessionParameter("CodProyecto");
		 * 
		 * if (string != null && !string.trim().equals("")) { try {
		 * cargarDatos(string); } catch (Exception e) { e.printStackTrace(); } }
		 */
		return txtProFechafin;
	}

	public void setTxtProFechafin(SelectInputDate txtProFechafin) {
		this.txtProFechafin = txtProFechafin;
	}

	public SelectInputDate getTxtProFechainicio() {
		return txtProFechainicio;
	}

	public void setTxtProFechainicio(SelectInputDate txtProFechainicio) {
		this.txtProFechainicio = txtProFechainicio;
	}

	public HtmlInputText getTxtProCodigo() {

		return txtProCodigo;
	}

	public void setTxtProCodigo(HtmlInputText txtProCodigo) {
		this.txtProCodigo = txtProCodigo;
	}

	public HtmlCommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(HtmlCommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public HtmlCommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(HtmlCommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public HtmlCommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(HtmlCommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public HtmlCommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(HtmlCommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public void setRenderDataTable(boolean renderDataTable) {
		this.renderDataTable = renderDataTable;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public List<ProyectoDTO> getProyectoDTO() {
		return proyectoDTO;
	}

	public void setProyectoDTO(List<ProyectoDTO> proyectoDTO) {
		this.proyectoDTO = proyectoDTO;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	/**
	 * A special type of JSF DataModel to allow a datatable and datapaginator to
	 * page through a large set of data without having to hold the entire set of
	 * data in memory at once. Any time a managed bean wants to avoid holding an
	 * entire dataset, the managed bean declares this inner class which extends
	 * PagedListDataModel and implements the fetchData method. fetchData is
	 * called as needed when the table requires data that isn't available in the
	 * current data page held by this object. This requires the managed bean
	 * (and in general the business method that the managed bean uses) to
	 * provide the data wrapped in a DataPage object that provides info on the
	 * full size of the dataset.
	 */
	private class LocalDataModel extends PagedListDataModel {
		public LocalDataModel(int pageSize) {
			super(pageSize);
		}

		public DataPage<Proyecto> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPage(startRow, pageSize);
		}
	}

	private class LocalDataModelDTO extends PagedListDataModel {
		public LocalDataModelDTO(int pageSize) {
			super(pageSize);
		}

		public DataPage<ProyectoDTO> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPageDTO(startRow, pageSize);
		}
	}

	public void uploadFile(ActionEvent event) {

		try {

			InputFile inputFile = (InputFile) event.getSource();
			if (inputFile.getStatus() == InputFile.SAVED) {

				currentFile = new InputFileData(inputFile.getFileInfo(),
						inputFile.getFile());

				synchronized (fileList) {
					if (fileList.size() < 1) {
						fileList.add(currentFile);
					} else {
						FacesUtils
								.addErrorMessage("Solo se puede subir un archivo");
					}
				}

			}

		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("",
					new FacesMessage(e.getMessage()));
		}

	}

	/**
	 * <p>
	 * This method is bound to the inputFile component and is executed multiple
	 * times during the file upload process. Every call allows the user to finds
	 * out what percentage of the file has been uploaded. This progress
	 * information can then be used with a progressBar component for user
	 * feedback on the file upload progress.
	 * </p>
	 * 
	 * @param event
	 *            holds a InputFile object in its source which can be probed for
	 *            the file upload percentage complete.
	 */
	public void fileUploadProgress(EventObject event) {
		// System.out.println("ENTRO AL FILEUPLOADPROGRESS");
		InputFile ifile = (InputFile) event.getSource();
		fileProgress = ifile.getFileInfo().getPercent();
		// renderManager.getOnDemandRenderer(sessionId).requestRender();
	}

	public String action_guardar() {
		try {
			List<File> doc = new ArrayList<File>();
			for (int i = 0; i < fileList.size(); i++) {
				InputFileData inputfile = (InputFileData) fileList.get(i);

				doc.add(inputfile.getFile());
				System.out.println(doc.get(i).getAbsolutePath());
				System.out.println(doc.get(i).getName());
			}
			BusinessDelegatorView.SaveDocuments(doc, FacesUtils
					.checkString(txtProNombre));
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("",
					new FacesMessage(e.getMessage()));
		}
		return "";
	}

	/**
	 * <p>
	 * Allows a user to remove a file from a list of uploaded files. This
	 * methods assumes that a request param "fileName" has been set to a valid
	 * file name that the user wishes to remove or delete
	 * </p>
	 * 
	 * @param event
	 *            jsf action event
	 */
	public void removeUploadedFile(ActionEvent event) {
		// Get the inventory item ID from the context.
		FacesContext context = FacesContext.getCurrentInstance();
		Map map = context.getExternalContext().getRequestParameterMap();
		String fileName = (String) map.get("fileName");

		synchronized (fileList) {
			InputFileData inputFileData;
			for (int i = 0; i < fileList.size(); i++) {
				inputFileData = (InputFileData) fileList.get(i);
				// remove our file
				if (inputFileData.getFileInfo().getFileName().equals(fileName)) {
					fileList.remove(i);
					break;
				}
			}
		}
	}

	public List<PersonaDTO> getIntegrantes() {
		return integrantes;
	}

	public void setIntegrantes(List<PersonaDTO> model) {
		this.integrantes = model;
	}

	public List<SelectItem> getItem() {
		return item;
	}

	public void setItem(List<SelectItem> item) {
		this.item = item;
	}

	public SelectInputText getTxtIntegrantes() {
		return txtIntegrantes;
	}

	public void setTxtIntegrantes(SelectInputText txtIntegrantes) {
		this.txtIntegrantes = txtIntegrantes;
	}

	public SelectInputText getTxtDirector() {
		return txtDirector;
	}

	public void setTxtDirector(SelectInputText txtDirector) {
		this.txtDirector = txtDirector;
	}

	public List<PersonaDTO> getDirectores() {
		return directores;
	}

	public void setDirectores(List<PersonaDTO> model2) {
		this.directores = model2;
	}

	public HtmlCommandButton getBtnAdd2() {
		return btnAdd2;
	}

	public void setBtnAdd2(HtmlCommandButton btnAdd2) {
		this.btnAdd2 = btnAdd2;
	}

	public HtmlInputText getTxtPalabraClave() {
		return txtPalabraClave;
	}

	public void setTxtPalabraClave(HtmlInputText txtPalabraClave) {
		this.txtPalabraClave = txtPalabraClave;
	}

	public HtmlSelectOneMenu getCmbEstado() {
		return cmbEstado;
	}

	public void setCmbEstado(HtmlSelectOneMenu cmbEstado) {
		this.cmbEstado = cmbEstado;
	}

	public List<SelectItem> getEstado() {
		try {
			estado.clear();
			List<Estado> estados = BusinessDelegatorView.getAllEstado();
			for (Estado estado2 : estados) {
				SelectItem item = new SelectItem(estado2.getEstCodigo(),
						estado2.getEstNombre());
				estado.add(item);
			}
		} catch (Exception e) {

		}

		return estado;
	}

	public void setEstado(List<SelectItem> estado) {
		this.estado = estado;
	}

	public HtmlSelectOneMenu getCmbFase() {
		return cmbFase;
	}

	public void setCmbFase(HtmlSelectOneMenu cmbFase) {
		this.cmbFase = cmbFase;
	}

	public List<SelectItem> getFases() {
		try {
			fases.clear();
			List<FaseProyecto> fases = BusinessDelegatorView.getAllFases();
			for (FaseProyecto fase2 : fases) {
				SelectItem item = new SelectItem(fase2.getFasproCodigo(), fase2
						.getFasproNombre());
				this.fases.add(item);
			}

		} catch (Exception e) {

		}
		return fases;
	}

	public void setFases(List<SelectItem> fases) {
		this.fases = fases;
	}

	public MenuBar getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(MenuBar usuarios) {
		this.usuarios = usuarios;
	}

	public List<MenuItem> getMenu() {
		return menu;
	}

	public void setMenu(List<MenuItem> menu) {
		this.menu = menu;
	}

	public HtmlSelectOneMenu getCmbAnte() {
		return cmbAnte;
	}

	public void setCmbAnte(HtmlSelectOneMenu cmbAnte) {
		this.cmbAnte = cmbAnte;
	}

	public List<SelectItem> getAntepr() {
		try {
			antepr.clear();
			List<Proyecto> proyectos = BusinessDelegatorView.getAllAntepro();
			for (Proyecto proyecto : proyectos) {
				SelectItem item = new SelectItem(proyecto.getProCodigo(),
						proyecto.getProNombre());
				antepr.add(item);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}

		return antepr;

	}

	public void setAntepr(List<SelectItem> antepr) {
		this.antepr = antepr;
	}

	public List<LineaInvestigacion> getLinea() {
		return linea;
	}

	public void setLinea(List<LineaInvestigacion> linea) {
		this.linea = linea;
	}

	public SelectInputText getTxtLinea() {
		return txtLinea;
	}

	public void setTxtLinea(SelectInputText txtLinea) {
		this.txtLinea = txtLinea;
	}

	public HtmlCommandButton getBtnAdd3() {
		return btnAdd3;
	}

	public void setBtnAdd3(HtmlCommandButton btnAdd3) {
		this.btnAdd3 = btnAdd3;
	}

	public List<LineaInvestigacionDTO> getLinea2() {
		return linea2;
	}

	public void setLinea2(List<LineaInvestigacionDTO> linea2) {
		this.linea2 = linea2;
	}

	public InputFileData getCurrentFile() {
		return currentFile;
	}

	public void setCurrentFile(InputFileData currentFile) {
		this.currentFile = currentFile;
	}

	public int getFileProgress() {
		return fileProgress;
	}

	public void setFileProgress(int fileProgress) {
		this.fileProgress = fileProgress;
	}

	public HtmlCommandButton getBtnGuardar() {
		return btnGuardar;
	}

	public void setBtnGuardar(HtmlCommandButton btnGuardar) {
		this.btnGuardar = btnGuardar;
	}

	public List getFileList() {
		return fileList;
	}

	public Proyecto getProyectoCon() {
		return proyectoCon;
	}

	public void setProyectoCon(Proyecto proyectoCon) {
		this.proyectoCon = proyectoCon;
	}

}
